package com.threadmethod.AtomicIntegerArray;

import java.util.concurrent.atomic.AtomicIntegerArray;

/**
 * @PackageName:com.threadmethod.AtomicIntegerArray
 * @ClassName:Test01
 * @Description: AtomicIntegerArray原子更新数组的基本操作
 * @Author: zhangxiaoyu
 * @date 2020/12/10 18:01
 */
public class Test01 {
    public static void main(String[] args){
         //创建一个指定长度的原子数组
        AtomicIntegerArray atomicIntegerArray = new AtomicIntegerArray(10);
        System.out.println(atomicIntegerArray);
        //返回指定位置的元素
        System.out.println(atomicIntegerArray.get(0));
        System.out.println(atomicIntegerArray.get(1));

        //设置指定位置的元素
        atomicIntegerArray.set(0,10);
        //可以在设置数组元素的新值，同时返回旧值
        System.out.println(atomicIntegerArray.getAndSet(1,11));
        System.out.println(atomicIntegerArray);
        //修改数组元素的值，把数组元素加上某个值
        System.out.println(atomicIntegerArray.addAndGet(0,22)); //32
        System.out.println(atomicIntegerArray.getAndAdd(1,33)); //44
        System.out.println(atomicIntegerArray);
        //CAS操作  如果数组中索引值为0的元素为32，就修改为222
        System.out.println(atomicIntegerArray.compareAndSet(0,32,222));
        System.out.println(atomicIntegerArray);
        System.out.println(atomicIntegerArray.compareAndSet(1,11,333));
        System.out.println(atomicIntegerArray);
        //自增/自减
        System.out.println(atomicIntegerArray.incrementAndGet(0)); //223 相当于前缀 先加一再返回
        System.out.println(atomicIntegerArray.getAndIncrement(1)); //44  相当于后缀 先返回再加一
        System.out.println(atomicIntegerArray);
        System.out.println(atomicIntegerArray.decrementAndGet(2)); //-1  先减一再返回
        System.out.println(atomicIntegerArray);
        System.out.println(atomicIntegerArray.getAndDecrement(3)); //先返回再减一
        System.out.println(atomicIntegerArray);
    }
}
